package cn.itcast.web.shiro;

import cn.itcast.utils.Encrypt;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/*
    自定义密码比较器  继承SimpleCredentialsMatcher
 *  Credentials:凭证 密码
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher{
    @Override
    //选择密码比较的方法
    /*
    参数1:前台传递过来的用户名和密码封装的token
    参数2:查询到用户数据的认证信息
     */
    public boolean doCredentialsMatch(AuthenticationToken token1, AuthenticationInfo info) {
        //1.获取前台页面中(token)提交过来的用户名和密码
        UsernamePasswordToken token = (UsernamePasswordToken) token1;
        String email = token.getUsername();
        String password = new String(token.getPassword());

        //2.获取身份认证信息中的 数据库中的密码
        String dbPassword = (String) info.getCredentials();

        //3.将token中密码进行加盐加密处理和数据库中的密码进行比较即可.
        //4.若一致,返回true
        //5.若不一致,返回false(底层还会抛异常)

        return dbPassword.equals(Encrypt.md5(password,email));
    }
}
